package tech.yqyl.solo.processor;

import cn.hutool.core.text.StrFormatter;
import lombok.AllArgsConstructor;
import lombok.Data;
import tech.yqyl.halo.HaloMarkdownBoot;
import tech.yqyl.solo.BlogInfo;
import tech.yqyl.solo.BlogProcessor;

import java.util.*;

/**
 * @className: CopyRightProcessor
 * @description:
 * @author: caoyangjie
 * @date: 2024/9/4
 **/
public class CopyRightProcessor extends AbstractProcessor implements BlogProcessor {

    @Override
    public boolean filter() {
        return !metaConfig.isWriteFile();
    }

    @Override
    public void process(BlogInfo blog) {
        // 具有版权标识, 添加自己的内容
        String rightLink = null;
        if( metaConfig.isCopyRight() || blog.isReadmeFlag() ) {
            rightLink = StrFormatter.format(CopyRight.selfRight.getCopyRightLink(), blog.getArticle().getOId());
        } else {
            // 不具备版权标识, 添加文件来源
            rightLink = CopyRight.getCopyRightBy(blog.getArticle().getFirstTag()).getCopyRightLink();
        }
        // 最后一个处理，需要将元文件加入进去
        blog.push(blog.getArticle().getArticleContent(),"");
        // 最后一个处理，需要将版本信息加进去
        blog.push( generateCopyRight(rightLink, blog.isReadmeFlag()), "" );
    }

    public String generateCopyRight( String rightLink, boolean readmeFlag ){
        if( metaConfig.isCopyRight() || readmeFlag ) {
            StringBuffer buffer = new StringBuffer("## 版权所有声明： \n" +
                    "* 您可以自由转载本网站的内容，但须遵守以下要求：\n" +
                    "* 必须在转载的内容中明确注明来源，包括网站名称和完整的文字链接，链接指向原始内容所在页面。\n" +
                    "* 示例链接格式：\n" +
                    "* 原文来源：[猿起源落的个人博客]({})\n" +
                    "\n" +
                    "* 如未遵守以上要求，我们保留追究法律责任的权利。");
            return StrFormatter.format(buffer.toString(), rightLink);
        } else {
            String copyRight = "## 版权归属声明：\n" +
                    "* 感谢您关注我们的文章。在这里，我们很高兴地向您分享来自互联网其他知名作者的一系列精彩文章。这些内容旨在为您提供更广泛的视角和深度的见解。\n" +
                    "* 我们在转载这些文章时，已遵循相关的版权规定，确保每篇文章均附有原作者的链接和版权声明，以尊重原创者的劳动成果。请您在阅读时，能够理解并尊重这些内容的版权。\n" +
                    "* 以上是引用[系列文章链接]({})\n" +
                    "* 如果您是上述文章的原创作者，并且不希望您的作品被转载，请及时与本站管理者联系 \n" +
                    "* - [QQ]: 81477492, [微信]： c81477492 \n" +
                    "* 我们将会尽快处理，并尊重您的版权权益。\n" +
                    "* 感谢您的支持与理解！";
            StringBuffer buffer = new StringBuffer(copyRight);
            return StrFormatter.format(buffer.toString(), rightLink);
        }
    }

    @Data
    @AllArgsConstructor
    private static class CopyRight {
        private static Map<String,CopyRight> copyRights = new HashMap<>();
        private String tagName;
        private String copyRightLink;

        // 拥有版权标识
        public static CopyRight selfRight = new CopyRight("", HaloMarkdownBoot.server.getDomain().concat("/archives/{}")).register();
        // 没有版权标识
        public static CopyRight iptables = new CopyRight("iptables使用技巧","https://www.zsythink.net/archives/tag/iptables/").register();
        public static CopyRight concurrency = new CopyRight("精通高并发系列","https://blog.csdn.net/l1028386804/category_9719933.html").register();

        public CopyRight register() {
            copyRights.put(this.getTagName(),this);
            return this;
        }
        public static CopyRight getCopyRightBy(String tagName){
            return Optional.ofNullable(copyRights.get(tagName)).orElseThrow(()->new RuntimeException("未找到版权标识,请查看版权标识设置"));
        }
    }
}
